// 路由鉴权：项目当中路由能不能被访问的权限设置
import router from '@/router'
import setting from './setting'

import nprogress from 'nprogress'
//引入进度条样式
import 'nprogress/nprogress.css'
nprogress.configure({ showSpinner: false }) // 去掉loading转圈效果
// 获取仓库里的token，判断用户是否登录
import { useUserStore } from './store/modules/user'
import pinia from './store/index.ts'
const userStore = useUserStore(pinia)
// 全局前置守卫
router.beforeEach(async (to: any, from: any, next: any) => {
  document.title = `${setting.title} - ${to.meta.title}`
  nprogress.start()
  if (userStore.token) {
    // 已经登录成功了，就不能再访问login页面
    if (to.path === '/login') {
      next({ path: '/' })
    } else {
      // 每次进入一个路由就判断一下用户信息是否存在
      console.log(userStore.userName)
      if (userStore.userName) {
        next() // 路由直接放行
      } else {
        // 如果没有用户信息，在守卫这里发送请求获取用户信息，成功以后再放行
        try {
          await userStore.userInfo()
          next()
        } catch (error) {
          //token过期:获取不到用户信息了
          //用户手动修改本地存储token
          //退出登录->用户相关的数据清空
          await userStore.userLogout()
          next({ path: '/login', query: { redirect: to.path } })
        }
      }
    }
  } else {
    if (to.path === '/login') {
      next()
    } else {
      next({ path: '/login', query: { redirect: to.path } }) // 登录成功后再跳转回来
    }
  }
})
// 全局后置钩子
router.afterEach((to: any, from: any) => {
  nprogress.done()
})
